package cn.itsource.potting;

/**
 *	封装：
 *		1. 概念：通过封闭的措施，保护内部的成员。
 *				Java中是通过访问权限修饰符来修饰类或者类中的成员（成员变量、方法、构造方法）来进行封装。
 *				public : 公共的，表示被修饰的成员在任意类中都可以访问到。
 *				protected: 只能在子类和同包类中使用
 *				默认不写（默认权限）:只能在同包类中使用
 *				private: 只能在当前类中使用
 *
 *	
 *		2. 作用： 保护内部成员安全
 *				1. 不希望在外部类随意访问修改对象的成员变量
 *				2. 只有满足条件后，才能访问修改对象的成员变量
 *				3. 只能获取成员变量，不允许修改成员的场景，例如单例模式
 *
 *		3. 封装步骤：设计类
 *				1. 私有化成员变量
 *				2. 为每一个成员变量提供一个公共的方法：
 *						void setXxx(...)赋值方法
 *						返回值 getXxx() 取值方法 ，如果成员变量是boolean类型，将getXxx()改为isXxx();
 *				3. 提供一个无参构造
 *				4. 该类用public修饰
 *			只有满足以上4点，该类就是一个标准的JavaBean
 *
 *		4. 注意：
 *				1. 并不是只有private修饰的成员才叫封装，只要是使用访问权限修饰符修饰成员，都是属于封装，只不过，private是最大限度的封装而已
 *				2. 能否把一个字段的get 和set方法写成一个方法   
				3. 一个类中的多个字段的赋值方法 写成一个方法 
				4. 单一职能原则 : 功能最小化,不要想着一个方法写完所有的功能 
 *				
 *		5. 小结：
			给成员变量赋值方式：
				1. 有参构造（适用于成员变量较少的赋值情况）
				2. setXxx(...)
				3. 对象名.成员变量 = 值; //封装后就不能使用了
				
				1.和2配合使用，setXxx()更加灵活，可以在任意时候使用，但是，有参构造只能在第一次创建对象的时候使用
				
			成员变量取值方式：
				1. getXxx()
				2. 对象名.成员变量; //封装后就不能使用了
 *			
 *		账户类
 */
public class Account {//4. 该类用public修饰
	/**账户名	1. 私有化成员变量 */
	private String name;
	/**余额		1. 私有化成员变量*/
	private double money;
	/**是否是vip账户		1. 私有化成员变量*/
	private boolean vip;
	
	/**
	 * 3. 提供一个无参构造
	 */
	public Account() {
	}
	
	public Account(String n,double m,boolean v){
		name = n;
		money = m;
		vip = v;
	}
	
	/**获取成员变量 name的值		2. 为每一个成员变量提供一个公共的方法：*/
	public String getName(){
		return name;
	}
	
	/**给成员变量name赋值		2. 为每一个成员变量提供一个公共的方法：*/
	public void setName(String n){
		name = n;
	}
	
	/**获取成员变量 money的值		2. 为每一个成员变量提供一个公共的方法：*/
	public double getMoney(){
		return money;
	}
	
	/**给成员变量money赋值		2. 为每一个成员变量提供一个公共的方法：*/
	public void setMoney(double m){
		money = m;
	}
	
	/**获取成员变量 vip的值		2. 为每一个成员变量提供一个公共的方法：*/
	public boolean isVip(){
		return vip;
	}
	
	/**给成员变量vip赋值			2. 为每一个成员变量提供一个公共的方法：*/
	public void setVip(boolean v){
		vip = v;
	}
}
